package com.example.spring_transaction.controller;

/**
 * @className: TestController3
 * @author: 芃
 * @description: 事务隔离级别
 * @date: 2024/12/30 18:57
 */
public class TestController3 {
    /*
     *
     * a.脏读：一个事务，读取到了另外一个事务中没有提交的数据，会在本事务中产生数据不一致的问题
     *  解决方案：@Transactional(isolation = Isolation.READ_COMMITTED) -》读已提交
     * b.不可重复读：一个事务，在针对同一个数据进行了多次查询，但是查询的结果不一致（期间其他事务针对此数据操作过）
     *  解决方案：@Transactional(isolation = Isolation.REPEATABLE_READ) -》可重复读
     *  本质是一把行锁-》事务操作时对一行加锁
     * c.幻读：一个事务，在针对整表的数据进行查询时，前后多次查询的结果不一致（多一条或少一条，期间其他事务删除或新增了数据）
     *  解决方案：@Transactional(isolation = Isolation.SERIALIZABLE) -》串行化
     *  本质是一把表锁-》事务操作时对整张表加锁
     *
     *  事务隔离级别：读未提交-》读已提交-》可重复读-》串行化
     * 如果不指定隔离属性，Spring会调用不同数据库所设置的默认隔离属性-》ISOLATION_DEFAULT
     * MySQL：REPEATABLE_READ
     * Oracle：READ_COMMITTED
     *
     */
}
